﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Modelo;
using JuegoBomberman.Vistas;

namespace JuegoBomberman.Controladores
{
    public class MapaControlador
    {
        private Mapa mapa;
        private MapaVista mapaVista;
        private decimal tiempoExplosion;
        private List<Posicion> posicionesExplosion;
        Type tipoToleTole = typeof(ToleTole);
        Type tipoMolotov = typeof(Molotov);

        public MapaControlador(Mapa mapa, MapaVista mapaVista)
        {
            this.mapa = mapa;
            this.mapaVista = mapaVista;
            this.tiempoExplosion = Convert.ToDecimal(0.5);//tiempo en el que se ve la explosion
            this.posicionesExplosion = new List<Posicion>();
        }

        public void Actualizarse(TimeSpan time)
        {
            mapa.checkearColision(mapa.obtenerJugador());
            List<IColisionable> copiaObstaculos = new List<IColisionable>(mapa.obtenerObstaculos());
            List<Bomba> bombasABorrar = new List<Bomba>();
            foreach (IColisionable obstaculo in copiaObstaculos)
            {
                if (obstaculo.GetType() == tipoMolotov || obstaculo.GetType() == tipoToleTole)
                {
                    Bomba bomba = obstaculo as Bomba;
                    bool exploto = bomba.RestarTiempo(time);
                    if (exploto)
                    {
                        List<Posicion> posicionesAfectadas = bomba.GetPosicionesAfectadas();
                        mapaVista.cargarPosicionesExplosion(posicionesAfectadas);
                        mapa.obtenerObstaculos().Remove(bomba);
                        tiempoExplosion = Convert.ToDecimal(0.5);
                    }
                }
            }
            RestarTiempo(time);
        }

        public void RestarTiempo(TimeSpan time)
        {
            decimal segundos = Convert.ToDecimal(time.Milliseconds) / 1000;
            tiempoExplosion -= segundos;
            if (tiempoExplosion <= 0)
            {
                mapaVista.cargarPosicionesExplosion(new List<Posicion>());
            }
        }
    }
}
